package lee.study.TheGeneric;


public class fanxing {
    /**
     * 1、<T>：占位符  表示当前类是一个泛型类
     * 2、泛型的意义：
     * 放数据的时候可以自动进行类型的检查
     * 取数据的时候可以自动进行类型转换
     *
     * 4、泛型是怎么编译的？
     * 泛型是在编译时期的一种机制--->擦除机制。编译的时候按照Object进行编译的。注意，不是替换！！
     *
     * 5、泛型是有边界的
     * 坑：
     * 1、不能new一个泛型类型的数组
     * 2、简单类型不能作为泛型类型的参数  <int>，<char>等。
     * 3、泛型类型的参数不参与类型组成  没有 Mystack<String>@74a14482这种。
     * @param <T>
     */
    static class Mystack<T> {
        public T[] elem;
        public int top;

        public Mystack() {
            //this.elem = new T[10];
            this.elem = (T[]) new Object[10];
        }

        public void push(T val) {
            this.elem[this.top] = val;
            this.top++;
        }

        public T peek() {
            return this.elem[this.top - 1];
        }
    }

    public static void main(String[] args) {
        Mystack<Integer> stack=new Mystack<>();
        System.out.println(stack);
        Mystack<String> mystack=new Mystack<>();
        System.out.println(mystack);
    }
}
